The present invention generally relates to a storage system, and more particularly to the restoration of a data element.
A storage system, in which technology called RAID (Redundant Arrays of Independent (or Inexpensive) Disks) is applied, generally comprises a RAID Group made up of a plurality of storage devices. The RAID Group storage area is constituted from a plurality of rows of sub-storage areas. The respective rows of sub-storage areas span the plurality of storage devices that make up the RAID Group, and are made up of a plurality of sub-storage areas corresponding to the plurality of storage devices. Hereinafter, one sub-storage area will be called a “stripe”, and one row, which is constituted by a plurality of stripes, will be called a “row of stripes”. The RAID Group storage area is made up of consecutive rows of stripes.
A RAID is known to have a number of levels (referred to as “RAID levels” hereinafter).
For example, there is RAID 5. In RAID 5, data is distributively written to a plurality of storage devices (for example, hard disk drives (HDDs)) constituting a RAID Group, which corresponds to RAID 5. More specifically, for example, data to be written specified by a host computer is divided into data of prescribed sizes (for the sake of convenience, referred to as “data units” hereinafter), the respective data units are divided into a plurality of data elements, and the plurality of data elements is written to a plurality of stripes. Further, in RAID 5, to restore a data element which cannot be read from a storage device as the result of a failure having occurred in this storage device, redundant information called “parity” (hereinafter “redundant code”) is created for a single data element, and this redundant code is also written to a stripe. More specifically, for example, when a RAID Group is constituted by four storage devices, three data elements, which constitute a data unit, are written to three stripes corresponding to three of these storage devices, and the redundant code is written to the stripe corresponding to the remaining one storage device. If a failure should occur in one of the four storage devices which constitute the RAID Group, the unreadable data element is restored by using the remaining two data elements which constitute the data unit comprising this unreadable data element, and the redundant code corresponding to this data unit.
One problem in RAID 5 is that it cannot tolerate so-called double-failures. More specifically, when it is not possible to read out two data elements of a plurality of data elements constituting a data unit due to the fact that two storage devices of a plurality of storage devices constituting a RAID Group have failed, these two data elements cannot be restored. This is because there is only one redundant code created for each data unit.
RAID 6 is the RAID level that is capable of tolerating a double-failure like the above. In RAID 6, two (two types) of redundant codes are created in each row of stripes (Refer to Intelligent RAID 6 Theory Overview and Implementation (http://www.intel.com/desing/storage/papers/308122.htm, http://www.intel.com/design/storage/intelligent_raid.htm)).
However, although RAID 6 is advantageous in that it is capable of tolerating a double-failure, it is disadvantageous in that it requires more storage capacity than RAID 5 for a single data unit. This is because more redundant codes are written for a data unit than in RAID 5.